<!DOCTYPE html>
<html lang="en-us">
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    
<meta charset="UTF-8">
<title>HTTP | Elasticsearch Guide [7.7] | Elastic</title>
<link rel="home" href="index.html" title="Elasticsearch Guide [7.7]">
<link rel="up" href="settings.html" title="Configuring Elasticsearch">
<link rel="prev" href="modules-fielddata.html" title="Field data cache settings">
<link rel="next" href="ilm-settings.html" title="Index lifecycle management settings in Elasticsearch">
<meta name="DC.type" content="Learn/Docs/Elasticsearch/Reference/7.7">
<meta name="DC.subject" content="Elasticsearch">
<meta name="DC.identifier" content="7.7">
<meta name="robots" content="noindex,nofollow">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://cdn.optimizely.com/js/18132920325.js"></script>
    <link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
    <link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
    <link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
    <link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
    <link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
    <link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
    <link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
    <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
    <link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192">
    <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
    <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
    <link rel="manifest" href="/manifest.json">
    <meta name="apple-mobile-web-app-title" content="Elastic">
    <meta name="application-name" content="Elastic">
    <meta name="msapplication-TileColor" content="#ffffff">
    <meta name="msapplication-TileImage" content="/mstile-144x144.png">
    <meta name="theme-color" content="#ffffff">
    <meta name="naver-site-verification" content="936882c1853b701b3cef3721758d80535413dbfd">
    <meta name="yandex-verification" content="d8a47e95d0972434">
    <meta name="localized" content="true">
    <meta name="st:robots" content="follow,index">
    <meta property="og:image" content="https://www.elastic.co/static/images/elastic-logo-200.png">
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
    <link rel="icon" href="/favicon.ico" type="image/x-icon">
    <link rel="apple-touch-icon-precomposed" sizes="64x64" href="/favicon_64x64_16bit.png">
    <link rel="apple-touch-icon-precomposed" sizes="32x32" href="/favicon_32x32.png">
    <link rel="apple-touch-icon-precomposed" sizes="16x16" href="/favicon_16x16.png">
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <link rel="stylesheet" type="text/css" href="/guide/static/styles.css">
  </head>

  <!--© 2015-2021 Elasticsearch B.V. Copying, publishing and/or distributing without written permission is strictly prohibited.-->

  <body>
    <!-- Google Tag Manager -->
    <script>dataLayer = [];</script><noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-58RLH5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-58RLH5');</script>
    <!-- End Google Tag Manager -->

    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-12395217-16"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'UA-12395217-16');
    </script>

    <!--BEGIN QUALTRICS WEBSITE FEEDBACK SNIPPET-->
    <script type="text/javascript">
      (function(){var g=function(e,h,f,g){
      this.get=function(a){for(var a=a+"=",c=document.cookie.split(";"),b=0,e=c.length;b<e;b++){for(var d=c[b];" "==d.charAt(0);)d=d.substring(1,d.length);if(0==d.indexOf(a))return d.substring(a.length,d.length)}return null};
      this.set=function(a,c){var b="",b=new Date;b.setTime(b.getTime()+6048E5);b="; expires="+b.toGMTString();document.cookie=a+"="+c+b+"; path=/; "};
      this.check=function(){var a=this.get(f);if(a)a=a.split(":");else if(100!=e)"v"==h&&(e=Math.random()>=e/100?0:100),a=[h,e,0],this.set(f,a.join(":"));else return!0;var c=a[1];if(100==c)return!0;switch(a[0]){case "v":return!1;case "r":return c=a[2]%Math.floor(100/c),a[2]++,this.set(f,a.join(":")),!c}return!0};
      this.go=function(){if(this.check()){var a=document.createElement("script");a.type="text/javascript";a.src=g;document.body&&document.body.appendChild(a)}};
      this.start=function(){var a=this;window.addEventListener?window.addEventListener("load",function(){a.go()},!1):window.attachEvent&&window.attachEvent("onload",function(){a.go()})}};
      try{(new g(100,"r","QSI_S_ZN_emkP0oSe9Qrn7kF","https://znemkp0ose9qrn7kf-elastic.siteintercept.qualtrics.com/WRSiteInterceptEngine/?Q_ZID=ZN_emkP0oSe9Qrn7kF")).start()}catch(i){}})();
    </script><div id="ZN_emkP0oSe9Qrn7kF"><!--DO NOT REMOVE-CONTENTS PLACED HERE--></div>
    <!--END WEBSITE FEEDBACK SNIPPET-->

    <div id="elastic-nav" style="display:none;"></div>
    <script src="https://www.elastic.co/elastic-nav.js"></script>

    <!-- Subnav -->
    <div>
      <div>
        <div class="tertiary-nav d-none d-md-block">
          <div class="container">
            <div class="p-t-b-15 d-flex justify-content-between nav-container">
              <div class="breadcrum-wrapper"><span><a href="/guide/" style="font-size: 14px; font-weight: 600; color: #000;">Docs</a></span></div>
            </div>
          </div>
        </div>
      </div>
    </div>

    <div class="main-container">
      <section id="content">
        <div class="content-wrapper">

          <section id="guide" lang="en">
            <div class="container">
              <div class="row">
                <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                  <!-- start body -->
                  <div class="page_header">
<strong>IMPORTANT</strong>: No additional bug fixes or documentation updates
will be released for this version. For the latest information, see the
<a href="../current/index.html">current release documentation</a>.
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch Guide [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="setup.html">Set up Elasticsearch</a></span>
»
<span class="breadcrumb-link"><a href="settings.html">Configuring Elasticsearch</a></span>
»
<span class="breadcrumb-node">HTTP</span>
</div>
<div class="navheader">
<span class="prev">
<a href="modules-fielddata.html">« Field data cache settings</a>
</span>
<span class="next">
<a href="ilm-settings.html">Index lifecycle management settings in Elasticsearch »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="modules-http"></a>HTTP<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/modules/http.asciidoc">edit</a>
</h2>
</div></div></div>
<p>The HTTP layer exposes Elasticsearch’s REST APIs over HTTP.</p>
<p>The HTTP mechanism is completely asynchronous in nature, meaning that
there is no blocking thread waiting for a response. The benefit of using
asynchronous communication for HTTP is solving the
<a href="http://en.wikipedia.org/wiki/C10k_problem" class="ulink" target="_top">C10k problem</a>.</p>
<p>When possible, consider using
<a href="http://en.wikipedia.org/wiki/Keepalive#HTTP_Keepalive" class="ulink" target="_top">HTTP keep alive</a>
when connecting for better performance and try to get your favorite
client not to do
<a href="http://en.wikipedia.org/wiki/Chunked_transfer_encoding" class="ulink" target="_top">HTTP chunking</a>.</p>
<div class="http-settings">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_http_settings"></a>HTTP settings<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/modules/http.asciidoc">edit</a>
</h3>
</div></div></div>
<p>The settings in the table below can be configured for HTTP. Note that none of
them are dynamically updatable so for them to take effect they should be set in
the Elasticsearch <a class="xref" href="settings.html" title="Configuring Elasticsearch">configuration file</a>.</p>
<div class="informaltable">
<table border="1" cellpadding="4px">
<colgroup>
<col class="col_1">
<col class="col_2">
</colgroup>
<thead>
<tr>
<th align="left" valign="top">Setting</th>
<th align="left" valign="top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" valign="top"><p><code class="literal">http.port</code></p></td>
<td align="left" valign="top"><p>A bind port range. Defaults to <code class="literal">9200-9300</code>.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">http.publish_port</code></p></td>
<td align="left" valign="top"><p>The port that HTTP clients should use when
communicating with this node. Useful when a cluster node is behind a
proxy or firewall and the <code class="literal">http.port</code> is not directly addressable
from the outside. Defaults to the actual port assigned via <code class="literal">http.port</code>.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">http.bind_host</code></p></td>
<td align="left" valign="top"><p>The host address to bind the HTTP service to. Defaults to <code class="literal">http.host</code> (if set) or <code class="literal">network.bind_host</code>.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">http.publish_host</code></p></td>
<td align="left" valign="top"><p>The host address to publish for HTTP clients to connect to. Defaults to <code class="literal">http.host</code> (if set) or <code class="literal">network.publish_host</code>.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">http.host</code></p></td>
<td align="left" valign="top"><p>Used to set the <code class="literal">http.bind_host</code> and the <code class="literal">http.publish_host</code>.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">http.max_content_length</code></p></td>
<td align="left" valign="top"><p>The max content of an HTTP request. Defaults to
<code class="literal">100mb</code>.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">http.max_initial_line_length</code></p></td>
<td align="left" valign="top"><p>The max length of an HTTP URL. Defaults
to <code class="literal">4kb</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">http.max_header_size</code></p></td>
<td align="left" valign="top"><p>The max size of allowed headers.  Defaults to <code class="literal">8kB</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">http.compression</code></p></td>
<td align="left" valign="top">
<p>Support for compression when possible (with
Accept-Encoding). If HTTPS is enabled, defaults to <code class="literal">false</code>. Otherwise, defaults
to <code class="literal">true</code>.</p>
<p>Disabling compression for HTTPS mitigates potential security risks, such as a
<a href="https://en.wikipedia.org/wiki/BREACH" class="ulink" target="_top">BREACH attack</a>. To compress HTTPS traffic,
you must explicitly set <code class="literal">http.compression</code> to <code class="literal">true</code>.</p>
</td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">http.compression_level</code></p></td>
<td align="left" valign="top"><p>Defines the compression level to use for HTTP responses. Valid values are in the range of 1 (minimum compression)
and 9 (maximum compression). Defaults to <code class="literal">3</code>.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">http.cors.enabled</code></p></td>
<td align="left" valign="top"><p>Enable or disable cross-origin resource sharing,
i.e. whether a browser on another origin can execute requests against
Elasticsearch. Set to <code class="literal">true</code> to enable Elasticsearch to process pre-flight
<a href="https://en.wikipedia.org/wiki/Cross-origin_resource_sharing" class="ulink" target="_top">CORS</a> requests.
Elasticsearch will respond to those requests with the <code class="literal">Access-Control-Allow-Origin</code> header
if the <code class="literal">Origin</code> sent in the request is permitted by the <code class="literal">http.cors.allow-origin</code>
list. Set to <code class="literal">false</code> (the default) to make Elasticsearch ignore the <code class="literal">Origin</code>
request header, effectively disabling CORS requests because Elasticsearch will
never respond with the <code class="literal">Access-Control-Allow-Origin</code> response header. Note that
if the client does not send a pre-flight request with an <code class="literal">Origin</code> header or it
does not check the response headers from the server to validate the
<code class="literal">Access-Control-Allow-Origin</code> response header, then cross-origin security is
compromised. If CORS is not enabled on Elasticsearch, the only way for the client
to know is to send a pre-flight request and realize the required response headers
are missing.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">http.cors.allow-origin</code></p></td>
<td align="left" valign="top"><p>Which origins to allow. Defaults to no origins
allowed. If you prepend and append a <code class="literal">/</code> to the value, this will
be treated as a regular expression, allowing you to support HTTP and HTTPs.
for example using <code class="literal">/https?:\/\/localhost(:[0-9]+)?/</code> would return the
request header appropriately in both cases. <code class="literal">*</code> is a valid value but is
considered a <span class="strong strong"><strong>security risk</strong></span> as your Elasticsearch instance is open to cross origin
requests from <span class="strong strong"><strong>anywhere</strong></span>.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">http.cors.max-age</code></p></td>
<td align="left" valign="top"><p>Browsers send a "preflight" OPTIONS-request to
determine CORS settings. <code class="literal">max-age</code> defines how long the result should
be cached for. Defaults to <code class="literal">1728000</code> (20 days)</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">http.cors.allow-methods</code></p></td>
<td align="left" valign="top"><p>Which methods to allow. Defaults to
<code class="literal">OPTIONS, HEAD, GET, POST, PUT, DELETE</code>.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">http.cors.allow-headers</code></p></td>
<td align="left" valign="top"><p>Which headers to allow. Defaults to
<code class="literal">X-Requested-With, Content-Type, Content-Length</code>.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">http.cors.allow-credentials</code></p></td>
<td align="left" valign="top"><p>Whether the <code class="literal">Access-Control-Allow-Credentials</code>
header should be returned. Note: This header is only returned, when the setting is
set to <code class="literal">true</code>. Defaults to <code class="literal">false</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">http.detailed_errors.enabled</code></p></td>
<td align="left" valign="top"><p>Enables or disables the output of detailed error messages
and stack traces in response output. Note: When set to <code class="literal">false</code> and the <code class="literal">error_trace</code> request
parameter is specified, an error will be returned; when <code class="literal">error_trace</code> is not specified, a
simple message will be returned. Defaults to <code class="literal">true</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">http.pipelining.max_events</code></p></td>
<td align="left" valign="top"><p>The maximum number of events to be queued up in memory before an HTTP connection is closed, defaults to <code class="literal">10000</code>.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">http.max_warning_header_count</code></p></td>
<td align="left" valign="top"><p>The maximum number of warning headers in
 client HTTP responses, defaults to unbounded.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">http.max_warning_header_size</code></p></td>
<td align="left" valign="top"><p>The maximum total size of warning headers in
client HTTP responses, defaults to unbounded.</p></td>
</tr>
</tbody>
</table>
</div>
<p>It also uses the common
<a class="xref" href="modules-network.html" title="Network settings">network settings</a>.</p>
</div>

<div class="http-rest-request-tracer">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_rest_request_tracer"></a>REST request tracer<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/modules/http.asciidoc">edit</a>
</h3>
</div></div></div>
<p>The HTTP layer has a dedicated tracer logger which, when activated, logs incoming requests. The log can be dynamically activated
by setting the level of the <code class="literal">org.elasticsearch.http.HttpTracer</code> logger to <code class="literal">TRACE</code>:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT _cluster/settings
{
   "transient" : {
      "logger.org.elasticsearch.http.HttpTracer" : "TRACE"
   }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/25.console"></div>
<p>You can also control which uris will be traced, using a set of include and exclude wildcard patterns. By default every request will be
traced.</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT _cluster/settings
{
   "transient" : {
      "http.tracer.include" : "*",
      "http.tracer.exclude" : ""
   }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/26.console"></div>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="modules-fielddata.html">« Field data cache settings</a>
</span>
<span class="next">
<a href="ilm-settings.html">Index lifecycle management settings in Elasticsearch »</a>
</span>
</div>
</div>

                  <!-- end body -->
                </div>
                <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                  <div id="rtpcontainer" style="display: block;">
                    <div class="mktg-promo">
                      <h3>Most Popular</h3>
                      <ul class="icons">
                        <li class="icon-elasticsearch-white"><a href="https://www.elastic.co/webinars/getting-started-elasticsearch?baymax=default&amp;elektra=docs&amp;storm=top-video">Get Started with Elasticsearch: Video</a></li>
                        <li class="icon-kibana-white"><a href="https://www.elastic.co/webinars/getting-started-kibana?baymax=default&amp;elektra=docs&amp;storm=top-video">Intro to Kibana: Video</a></li>
                        <li class="icon-logstash-white"><a href="https://www.elastic.co/webinars/introduction-elk-stack?baymax=default&amp;elektra=docs&amp;storm=top-video">ELK for Logs &amp; Metrics: Video</a></li>
                      </ul>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </section>

        </div>


<div id="elastic-footer"></div>
<script src="https://www.elastic.co/elastic-footer.js"></script>
<!-- Footer Section end-->

      </section>
    </div>

<script src="/guide/static/jquery.js"></script>
<script type="text/javascript" src="/guide/static/docs.js"></script>
<script type="text/javascript">
  window.initial_state = {}</script>
  </body>
</html>
